package services;

import java.util.Iterator;

import objetos.ProdutoObj;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;

import classes.EstoqueImpl;

public class EstoqueService {

	public OMElement alterarEstoqueProduto(OMElement element) {
		
		EstoqueImpl ei = new EstoqueImpl();
		
		// Criar um OMElement que retorna um booleano
		Iterator<OMElement> it = element.getChildElements();
		OMElement codigo_par = it.next();
		OMElement quantidade_par = it.next();
		
		Integer codigo = Integer.parseInt(codigo_par.getText());
		Integer quantidade = Integer.parseInt(quantidade_par.getText());
		
		ei.alterarEstoqueProduto(codigo, quantidade);
		
		OMFactory fac = OMAbstractFactory.getOMFactory();
		OMNamespace ns_ret = fac.createOMNamespace("return", "ret");
		OMElement return_element = fac.createOMElement("atributo", ns_ret);
		
		return return_element;
	}
	
	public OMElement operarSobreEstoque(OMElement element) {
		
		EstoqueImpl ei = new EstoqueImpl();
		
		// Criar um OMElement que retorna um booleano
		Iterator<OMElement> it = element.getChildElements();
		OMElement codigo_par = it.next();
		OMElement quantidade_par = it.next();
		
		Integer codigo = Integer.parseInt(codigo_par.getText());
		Integer quantidade = Integer.parseInt(quantidade_par.getText());
		
		Boolean retorno = ei.operarSobreEstoque(codigo, quantidade);
		
		OMFactory fac = OMAbstractFactory.getOMFactory();
		OMNamespace ns_ret = fac.createOMNamespace("return", "ret");
		OMElement return_element = fac.createOMElement("atributo", ns_ret);
		
		return_element.setText(retorno.toString());
		
		return return_element;
	}
	
	public OMElement adicionarProduto(OMElement element) {
		
		OMFactory fac = OMAbstractFactory.getOMFactory();
		OMNamespace ns_ret = fac.createOMNamespace("return", "ret");
		OMElement return_element = fac.createOMElement("atributo", ns_ret);
		
		EstoqueImpl ei = new EstoqueImpl();
		ProdutoObj produto = new ProdutoObj();
				
		// Criar um OMElement que retorna um booleano
		Iterator<OMElement> it = element.getChildElements();
		OMElement produto_par = it.next();
		OMElement quantidade_par = it.next();
		
		produto.loadOMElement(produto_par);
		
		if (ei.adicionarProduto(produto, Integer.parseInt(quantidade_par.getText())))
			return_element.setText("true");
		else return_element.setText("false");
		
		return return_element;
	}
	
	public OMElement removerProduto(OMElement element) {
		
		EstoqueImpl ei =  new EstoqueImpl();
		
		// Cria elemento de retorno
		OMFactory factory = OMAbstractFactory.getOMFactory();
		OMNamespace ns_return = factory.createOMNamespace("return", "ret");
		OMElement return_element = factory.createOMElement("return", ns_return);
		
		// Objeto
		ProdutoObj produto = new ProdutoObj();
		
		// Seta objeto
		produto.loadOMElement(element);
		
		// Preenche retorno
		if (ei.removerProduto(produto)) return_element.setText("true");
		else return_element.setText("false");	
		
		return return_element;
	}
}
